/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package domain.controllers;


import domain.Entity.EntityProyecto;
import domain.Entity.EntityTarea;
import domain.Entity.EntityTareaTrabajada;
import domain.Entity.EntityTrabajador;
import domain.Entity.EntityUsuario;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import managers.ProyectoManager;
import managers.TareaManager;
import managers.UsuarioManager;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.view.RedirectView;

/**
 *
 * @author jorge
 */
public class obtenerTareaController implements Controller{
    
    TareaManager tm = TareaManager.getInstance();
    UsuarioManager um = UsuarioManager.getInstance();
    ProyectoManager pm = ProyectoManager.getInstance();
    
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        
        ModelAndView mav = new ModelAndView();
        HttpSession session = request.getSession();
        
        EntityUsuario eu = (EntityUsuario) session.getAttribute("usuario"); 
        long idTarea = Integer.parseInt(request.getParameter("idTarea"));
        EntityTarea et = tm.getPorID(idTarea);
        String tipo = request.getParameter("tipo");
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        String fechaInicial = null;
        String fechaFinal = null;
        if(et.getFecha_ini() !=null){
            fechaInicial = sdf.format(et.getFecha_ini());
        }
        if(et.getFecha_fin() !=null){
            fechaFinal = sdf.format(et.getFecha_fin());
        }
        if(tipo.equals("modificar")){
            List l = new ArrayList();
            List proyectos = pm.mostrarProyectosGestor(eu.getDni());
            Iterator itp = proyectos.iterator();
            while(itp.hasNext()){
                EntityProyecto proyecto = (EntityProyecto) itp.next();
                List tareas = tm.mostrarTareasProyecto(proyecto.getIdProyecto());
                Iterator itt = tareas.iterator();
                while(itt.hasNext()){
                    EntityTarea tarea = (EntityTarea) itt.next();
                    StringTokenizer st = new StringTokenizer(tarea.getEtiquetas());
                    while(st.hasMoreTokens()){
                        String s = st.nextToken();
                            if(!l.contains(s)){ 
                                l.add(s);
                            } 
                    }
                }
            }    
            Collections.sort(l);
            session.setAttribute("etiquetas", l);
            session.setAttribute("fecIni", fechaInicial);
            session.setAttribute("fecFin", fechaFinal);
            session.setAttribute("tarea", et);
            mav.setView(new RedirectView("modificarTarea.htm"));
        }else if(tipo.equals("ver")){
            
            List tiempos = new ArrayList();
            Iterator it1 = et.getEtr().iterator();
            while(it1.hasNext()){
                EntityTrabajador etr = (EntityTrabajador) it1.next();
                List trabajados = um.tiempoTrabajadoTarea(etr, et);
                Iterator it2 = trabajados.iterator();
                int ht = 0;
                int mt = 0;
                while(it2.hasNext()){
                    EntityTareaTrabajada ett =  (EntityTareaTrabajada) it2.next();
                   /* TODO: Change!!!!
                    Time tiempoTrabajado = ett.getTiempo();
                    int htt = tiempoTrabajado.getHours();
                    int mtt = tiempoTrabajado.getMinutes();
                    ht = ht + htt;
                    mt = mt + mtt;
                    if(mt > 60){
                        mt = mt - 60;
                        ht = ht + 1;
                    }*/
                }   
                etr.setHoras(ht);
                etr.setMinutos(mt);
                tiempos.add(etr);
            }
            
            session.setAttribute("tiempostrabajados", tiempos);
            session.setAttribute("fecIni", fechaInicial);
            session.setAttribute("fecFin", fechaFinal);
            session.setAttribute("tarea", et);
            mav.setView(new RedirectView("verTarea.htm"));
        }else if(tipo.equals("borrar")){
            tm.borrarTarea(et.getIdTarea());
            mav.setView(new RedirectView("mostrarTareas.htm"));
        }else if(tipo.equals("tiempo")){
            session.setAttribute("tarea", et);
            mav.setView(new RedirectView("modificarTiempo.htm"));
        }else if(tipo.equals("completar")){
            et.setCompletado(true);
            tm.completar(et);
            mav.setView(new RedirectView("mostrarTareas.htm"));
        }else if(tipo.equals("etiqueta")){
            EntityTrabajador etr = (EntityTrabajador) session.getAttribute("trabajadorUsuario");
            List l = new ArrayList();
            List proyectos = pm.mostrarProyectosGestor(etr.getEg().getDni());
            Iterator itp = proyectos.iterator();
            while(itp.hasNext()){
                EntityProyecto proyecto = (EntityProyecto) itp.next();
                List tareas = tm.mostrarTareasProyecto(proyecto.getIdProyecto());
                Iterator itt = tareas.iterator();
                while(itt.hasNext()){
                    EntityTarea tarea = (EntityTarea) itt.next();
                    StringTokenizer st = new StringTokenizer(tarea.getEtiquetas());
                    while(st.hasMoreTokens()){
                        String s = st.nextToken();
                            if(!l.contains(s)){ 
                                l.add(s);
                            } 
                    }
                }
            }    
            Collections.sort(l);
            session.setAttribute("etiquetas", l);
            session.setAttribute("tarea", et);
            mav.setView(new RedirectView("etiquetar.htm"));
        }
        
        return mav;
        
        
    }
}